package com.itheima.service.Impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.itheima.POJO.CheckItem;
import com.itheima.constant.MessageConstant;
import com.itheima.dao.checkItemMapper;
import com.itheima.entity.PageResult;
import com.itheima.entity.QueryPageBean;
import com.itheima.entity.Result;
import com.itheima.service.checkitemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

//Dubbo的 Service注解 表明为服务的提供者
//interfaceClass = checkitemService.class 与事务的注解 共同使用
@Service(interfaceClass = checkitemService.class)
@Transactional
public class checkItemServiceImpl implements checkitemService {

    @Autowired
    private checkItemMapper checkItemMapper;

    /**
     * 添加体检项目 的服务提供者
     * @param checkItem
     * @return
     */
    @Override
    public Result addCheckitem(CheckItem checkItem) {
        try {
            checkItemMapper.addCheckItem(checkItem);
        } catch (Exception e) {
            e.printStackTrace();
            Result result = new Result(false,"添加失败请重试!");
            return  result;
        }
        return new Result(true,"添加成功!");
    }

    /**
     * 根据前端传过来的 当前页 每页显示的条数 和 查询的条件
     *
     * 去获取检查项 信息
     * @param queryPageBean
     * @return
     */
    @Override
    public PageResult findPage(QueryPageBean queryPageBean) {
        Integer currentPage = queryPageBean.getCurrentPage();
        Integer pageSize = queryPageBean.getPageSize();
        String queryString = queryPageBean.getQueryString();
        //下面这步其实多此一举 因为前端定义当前页默认为1 了!
        if (currentPage==null||currentPage.equals("")){
            currentPage=1;
        }
        PageHelper.startPage(currentPage,pageSize);
        Page<CheckItem> page=checkItemMapper.findPage(queryString);
        //前台那边有当前页,每页显示的条数,我需要再给前台总记录数,和本页要展示的数据
        /*
         private Long total;//总记录数
         private List rows;//当前页结果
        * */
        PageResult pageResult=new PageResult(page.getTotal(),page.getResult());
        return pageResult;
    }

    /**
     * 根据id去删除检查项
     * @param id
     */
    @Override
    public void deleteCheckitem(Integer id) {
        System.out.println("Service::"+id);
        /*
          检查项和检查组绑定,无法删除
          检查项能删除的前提是没有跟检查组进行绑定,也就是该检查项不作为任何外键
         */
        //先去查询 该检查项是否作为外键
        //去t_checkgroup_checkitem表中查询该检查项是否是哪个分组里面的
         Long count  = checkItemMapper.findGroupByCheckitem4Id(id);
         if (count>0){
             //当该检查项是外键的时候
             throw  new RuntimeException("当前检查项被检查组绑定,无法删除");
         }else {
             //该检查项不是外键的时候
             //去数据库中删除
             checkItemMapper.delectCheckItemById(id);
         }
    }


    /**
     * 根据id找到checkitem
     * @param id
     * @return
     */
    @Override
    public Result findCheckitemByid(Integer id) {
        try {
            CheckItem checkItem = checkItemMapper.findCheckitemByid(id);
            return new Result(true, MessageConstant.QUERY_CHECKITEM_SUCCESS,checkItem);
        } catch (Exception e) {
            e.printStackTrace();
            return  new Result(false,"获取数据失败,请刷新当前页面");
        }

    }

    /**
     * 修改检查项
     * @param checkItem
     */
    @Override
    public void updataCheckitem(CheckItem checkItem) {

        Long aLong = checkItemMapper.updataCheckitem(checkItem);
        System.out.println("along==="+aLong);
       // aLong=0L;
        if (aLong==0){
            throw new RuntimeException(MessageConstant.EDIT_CHECKITEM_FAIL);
        }
    }
}
